/*
 * File:   main.cpp
 * Author: song
 *
 * Created on 2010年10月28日, 下午12:23
 */

#include <QtGui/QApplication>
#include "Data.h"
#include "Locate.h"
#include "Track.h"
#include "Control.h"
#include "PreProcess.h"
#include<omp.h>
#include<QDialog>
#include "ui_NewForm.h"
#include "NewForm.h"
#include<QTextCodec>

extern int numFrame;
extern int hdims;
extern int minT;



//启动摄像头录制模块
void StartCam()
{
    Camera cam0;

    //图像预处理类
    PreProcess myPrePro0(&cam0);
    //目标检测类
    Locate myLoc0(&cam0);
    //目标跟踪类
    Track myTrack0(&cam0);
    //控制类
    Control myCon;
    
    if(myCon.OpenCam(cam0, -1) == true){
        double time;
        clock_t start, end;

        do{
            start = clock();

            //判断是否获取成功
            if(!cam0.pFrame){
                cout<<"图像获取失败"<<endl;
                return ;
            }
            if(numFrame == 52){
                cvShowImage("bk", cam0.pBkImg);
            }
            myPrePro0.Process(cam0.pFrame, &cam0);
            ///////////////调试代码//////////////////////////////////
            cvConvert(cam0.pBkMat, cam0.pBkImg);
            //cvConvert(pFrMat, pFrImg);
            //cvConvert(pGrayMat, pGray);


            if(numFrame > 51)
            {
                myLoc0.scan(cam0.pFrMat);
                myLoc0.Draw(cam0.pFrImg, CV_RGB(255,255,255));
//                cvWaitKey(0);

                if(numFrame == 52)
                    myTrack0.Init();

                myTrack0.Run(myLoc0.V);
            }

            cvCopy(cam0.pFrame, cam0.pPre);

            if(numFrame > 51)
            {
                myTrack0.Draw(cam0.pFrame, CV_RGB(255,0,0));
                cvShowImage("DetectorVPA1.0", cam0.pFrame);
            }

            cvShowImage("bk", cam0.pBkImg);
            cvShowImage("fr", cam0.pFrImg);

            ///////////////////////////////////////////////////////
            end = clock();
            time = (double)(end - start)/CLOCKS_PER_SEC * 1000;
            cout<<time<<endl;
            time = 50 - time;
            if(time <= 0) time = 1;
            cvWaitKey(time);

        }
        while(cam0.pFrame = cvQueryFrame(cam0.capture));
    }
}

//启动avi文件读取模块
//void StartAvi(char* path)
//{
//    Camera cam0;
//
//    //图像预处理类
//    PreProcess myPrePro0(&cam0);
//    //目标检测类
//    Locate myLoc0(&cam0);
//    //目标跟踪类
//    Track myTrack0(&cam0);
//    //控制类
//    Control myCon;
//
//    if(myCon.OpenAvi(cam0, path) == true){
//        double time;
//        clock_t start, end;
//
//        do{
//            start = clock();
//
//            //判断是否获取成功
//            if(!cam0.pFrame){
//                cout<<"图像获取失败"<<endl;
//                return ;
//            }
//            if(numFrame == 52){
//                cvShowImage("bk", cam0.pBkImg);
//            }
//            myPrePro0.Process(cam0.pFrame, &cam0);
//            ///////////////调试代码//////////////////////////////////
//            cvConvert(cam0.pBkMat, cam0.pBkImg);
//            //cvConvert(pFrMat, pFrImg);
//            //cvConvert(pGrayMat, pGray);
//
//
//            if(numFrame > 51)
//            {
//                myLoc0.scan(cam0.pFrMat);
//                myLoc0.Draw(cam0.pFrImg, CV_RGB(255,255,255));
////                cvWaitKey(0);
//
//                if(numFrame == 52)
//                    myTrack0.Init();
//
//                myTrack0.Run(myLoc0.V);
//            }
//
//            cvCopy(cam0.pFrame, cam0.pPre);
//
//            if(numFrame > 51)
//            {
//                myTrack0.Draw(cam0.pFrame, CV_RGB(255,0,0));
//                //cvShowImage("DetectorVPA1.0", cam0.pFrame);
//            }
//
//            //cvShowImage("bk", cam0.pBkImg);
//            //cvShowImage("fr", cam0.pFrImg);
//
//            ///////////////////////////////////////////////////////
//            end = clock();
//            time = (double)(end - start)/CLOCKS_PER_SEC * 1000;
//            cout<<"time:"<<time<<endl;
//            time = 60 - time;
//            if(time <= 0) time = 1;
//            cvWaitKey(10);
//
//        }
//        while(cam0.pFrame = cvQueryFrame(cam0.capture));
//    }
//}


int main(int argc, char *argv[]) {
    // initialize resources, if needed
    // Q_INIT_RESOURCE(resfile);

    QApplication app(argc, argv);
    omp_set_dynamic(0);
    omp_set_nested(1);

    //测试是否开启openmp选项
//int i = 0;
//
//#pragma omp parallel num_threads(3)
//{
//    #pragma omp parallel num_threads(2) shared(i)
//    {
//        cout<<"i:"<<i++<<endl;
//    }
//}
//
//int j = 2;

    NewForm *form = new NewForm;
    form->showTreeView();
    // create and show your widgets here
    form->show();
    QTextCodec *localCode = QTextCodec::codecForLocale();
    QTextCodec::setCodecForLocale(localCode);
    QTextCodec::setCodecForCStrings(localCode);
    QTextCodec::setCodecForTr(localCode);
    //StartAvi("/home/song/桌面/test/test02.avi");
    //StartCam();
    // create and show your widgets here

    return app.exec();
}
